package Singleton;

/**
 * 双检锁/双重校验锁
 * 是否 Lazy 初始化：是
 * 是否多线程安全：是
 * User:xuzhidian
 * Date:2018/3/19
 * Time:23:26
 */
public class DoubleLockSingleton {
    /**
     * 注意这里需要注意可见性
     */
    private volatile static DoubleLockSingleton instance;

    private DoubleLockSingleton() {


    }

    /**
     * 在安全懒汉式基础上改进，采用双锁机制，安全且在多线程情况下能保持高性能。
     *
     * @return
     */
    public static DoubleLockSingleton getInstance() {
        if (instance == null) {
            synchronized (DoubleLockSingleton.class) {
                if (instance == null) {
                    instance = new DoubleLockSingleton();
                }
            }
        }
        return instance;
    }
}
